ABAP 通过sumbit调用另外一个程序使用job形式执行 您所在的位置:网站首页 create job权限 ABAP 通过sumbit调用另外一个程序使用job形式执行

ABAP 通过sumbit调用另外一个程序使用job形式执行

2024-05-19 06:00| 来源: 网络整理| 查看: 265

涉及到两个程序:

ZTEST_ZUMA02 (主程序) ZTEST_ZUMA(被调用的程序,需要以后台job执行) "ztest_zuma 的代码 DATA col TYPE i VALUE 0. DO 8 TIMES.   MESSAGE 'JOB HERE' TYPE 'S'. ENDDO. 程序ZTEST_ZUMA是在程序ZTEST_ZUMA02中以job的形式调用的,先来看看SM37里面ZTEST_ZUMA的执行日志,当然这些日志是ZTEST_ZUMA程序中通过message输出的: 到这里你应该有一个初步的认识了,那么关键看看ZTEST_ZUMA02是通过什么方式实现以JOB的形式调用ZTEST_ZUMA的呢,看一下代码的几处关键位置,job_open,submit,job_close. 简单解释一下,代码中也有注释。 job_open :开启一个后台job,job名任意命名,会生产一个job id. submit :调用需要设置为后台执行的程序,使用via 参数设置job的相关参数.(这个时候可以看到SM37里面有一个job 状态为schedule). job_close :把之前创建的job release 并执行(参数strtimmed = 'X' 表示立即执行,设置某一个时间执行还没有研究). ====================== REPORT ztest_zuma02. DATA: lv_jobnum TYPE btcjobcnt. DATA: gv_jobname TYPE btcjob VALUE 'ZUMATESTJOB'. "Step1. open a job define a job_name(whatever you want), and return a jobnumber. CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = gv_jobname IMPORTING jobcount = lv_jobnum EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3 OTHERS = 4. "Step2. Submit a program which you want to run in background as job. SUBMIT ztest_zuma VIA JOB gv_jobname NUMBER lv_jobnum AND RETURN. "ztest_zuma 的代码 "DATA col TYPE i VALUE 0. "DO 8 TIMES. " MESSAGE 'JOB HERE' TYPE 'S'. "ENDDO. "Step3-Option. This is option step, for some special requirment modify job name instead of sy-uname. " in this step first call BP_JOB_READ to read the job information and then call BP_JOB_MODIFY to modify " the user name. PERFORM modify_job_name USING lv_jobnum gv_jobname. IF sy-subrc = 0. "Step4. To release the job which you were opened in step1. CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = lv_jobnum jobname = gv_jobname strtimmed = 'X' EXCEPTIONS cant_start_immediate = 1 invalid_startdate = 2 jobname_missing = 3 job_close_failed = 4 job_nosteps = 5 job_notex = 6 lock_failed = 7 OTHERS = 8. IF sy-subrc NE 0. MESSAGE 'Job error' TYPE 'E'. ELSE. MESSAGE 'Job success' TYPE 'S'. ENDIF. ENDIF. *&---------------------------------------------------------------------* *& Form MODIFY_JOB_NAME *&---------------------------------------------------------------------* * Modify user name for job owner *----------------------------------------------------------------------* * -->P_LV_JOBNUM text * -->P_GV_JOBNAME text *----------------------------------------------------------------------* FORM modify_job_name USING p_lv_jobnum p_gv_jobname. DATA: ls_jobhead TYPE tbtcjob, lt_jobstep TYPE STANDARD TABLE OF tbtcstep. CALL FUNCTION 'BP_JOB_READ' EXPORTING job_read_jobcount = p_lv_jobnum job_read_jobname = p_gv_jobname job_read_opcode = '20' IMPORTING job_read_jobhead = ls_jobhead TABLES job_read_steplist = lt_jobstep EXCEPTIONS invalid_opcode = 1 job_doesnt_exist = 2 job_doesnt_have_steps = 3 OTHERS = 4. IF sy-subrc 0. ENDIF. ls_jobhead-sdluname = 'BATCH_CM'. CALL FUNCTION 'BP_JOB_MODIFY' EXPORTING dialog = 'N' jobcount = p_lv_jobnum jobname = p_gv_jobname new_jobhead = ls_jobhead opcode = '16' IMPORTING modified_jobhead = ls_jobhead TABLES new_steplist = lt_jobstep EXCEPTIONS cant_derelease_job = 1 cant_enq_job = 2 cant_read_jobdata = 3 cant_release_job = 4 cant_set_jobstatus_in_db = 5 cant_start_job_immediately = 6 cant_update_jobdata = 7 eventcnt_generation_error = 8 invalid_dialog_type = 9 invalid_new_jobdata = 10 invalid_new_jobstatus = 11 invalid_opcode = 12 invalid_startdate = 13 job_edit_failed = 14 job_modify_canceled = 15 job_not_modifiable_anymore = 16 nothing_to_do = 17 no_batch_on_target_host = 18 no_batch_server_found = 19 no_batch_wp_for_jobclass = 20 no_modify_privilege_given = 21 no_release_privilege_given = 22 no_startdate_no_release = 23 target_host_not_defined = 24 tgt_host_chk_has_failed = 25 invalid_targetgroup = 26 conflicting_targets = 27 OTHERS = 28. IF sy-subrc 0. ENDIF. ENDFORM.

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有